package SistemaDAOS;

import Herramientas.PasarelaDatos;
import Herramientas.ResultSets;
import SistemaDTOS.ServiciosAsignadosUsuarioDTO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Mauricio Alan
 */
public class ServiciosAsignadosUsuarioDAO {

    private PasarelaDatos db;
    private ResultSets res;

    public ServiciosAsignadosUsuarioDAO() {
        db = new PasarelaDatos();
        res = new ResultSets();
    }

    /**
     * ALAN GONZALEZ ESTE METODO CREA UNA NUEVA COLUMNA CON EL PREFIJO user_ en
     * la tabla de servicios_asignados_usuario cuando se genera el registro de
     * un nuevo usuario
     *
     * @param usuario
     */
    public void columnaServiciosUsuarioNuevo(String usuario) {
        db.openDatabase();
        String query = "ALTER TABLE servicios_asignados_usuario add user_" + usuario + " tinyint default 0;";
        db.executeUpdate(query);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ METODO QUE DEVUELVE LOS IDS DE LAS SECCIONES O SERVICIOS
     * ASIGNADOS AL USUARIO LOGUEADO
     *
     * @param usuario
     * @return
     */
    public Vector serviciosUsuario(String usuario) {
        db.openDatabase();
        Vector v = new Vector();
        int id = 0;
        String query
                = " SELECT "
                + " servicios_asignados_usuario.id_servicio, "
                + " servicios_asignados_usuario.user_" + usuario
                + " FROM "
                + " servicios_asignados_usuario "
                + " WHERE "
                + " servicios_asignados_usuario.user_" + usuario + " > 0";
        ResultSet rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                id = rst.getInt("id_servicio");
                v.add(id);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ServiciosAsignadosUsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return v;
    }

    /**
     * ALAN GONZALEZ DEVUELVE EN UN VECTOR LOS SERVICIOS ASIGNADOS A UN USUARIO
     * EN PARTICULAR
     *
     * @param nombreUsuario
     * @return
     */
    public Vector serviciosAsignadosUsuario(String nombreUsuario) {
        Vector vServicios = new Vector();
        String sql = new String();
        sql += " SELECT ";
        sql += " menu_servicios.id,";
        sql += " menu_servicios.titulo,  ";
        sql += " servicios_asignados_usuario.user_" + nombreUsuario + " as serviciosUsuario";
        sql += " FROM ";
        sql += " servicios_asignados_usuario, ";
        sql += " menu_servicios ";
        sql += " WHERE ";
        sql += " menu_servicios.id = servicios_asignados_usuario.id_servicio;";
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);

        try {
            while (rst.next()) {
                ServiciosAsignadosUsuarioDTO servicios = new ServiciosAsignadosUsuarioDTO();
                servicios.setIdServicio(rst.getInt("id"));
                servicios.setTituloServicio(rst.getString("titulo"));
                servicios.setBanderaAsignacionServicio(rst.getInt("serviciosUsuario"));
                vServicios.add(servicios);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ServiciosAsignadosUsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return vServicios;
    }

    /**
     * ALAN GONZALEZ ESTE METODO REALIZA LA ACTUALIZACION DE BADERAS DE LOS
     * SERVICIOS SOLICITADOS PARA EL USUARIO
     * @param idServicio
     * @param banderaAsignar
     * @param nombreUsuario 
     */
    public void actualizaBanderasServicio(int idServicio, int banderaAsignar, String nombreUsuario) {
        db.openDatabase();
        String sql = new String();
        sql += " UPDATE";
        sql += " servicios_asignados_usuario ";
        sql += " SET ";
        sql += " servicios_asignados_usuario.user_"+nombreUsuario+" = "+ banderaAsignar;
        sql += " WHERE ";
        sql += " servicios_asignados_usuario.id_servicio="+idServicio;
        System.out.println("LA QUERY ES: "+ sql);
        db.execute(sql);
        db.closeDatabase();
    }

}
